-- 商品编号，索引从1开始
local good_id = KEYS[1]
-- 会员账号，索引从1开始
local member_account = ARGV[1]

-- 商品库存key
local good_qty_key = 'seckill-stock:' .. good_id
-- 商品秒杀结束标识的key
local good_end_key = 'seckill-end:' .. good_id
-- 存储秒杀成功的用户id的集合的key
local bought_users_key = 'seckill-members:' .. good_id

-- 判断用户是否秒杀过
local has_bought = redis.call('sismember',bought_users_key, member_account)

-- 会员已秒杀过此商品
if has_bought > 0 then
    return -100
end

-- 判断该商品是否秒杀结束
local is_end = redis.call('get', good_end_key)

-- 此商品秒杀结束
if is_end and is_end == "true" then
    return -200
end

-- 扣减库存，并且把用户的id添加进已购买用户set里。库存-1
redis.call("decr", good_qty_key)
-- 再次获取商品当前库存
local stock = redis.call('get', good_qty_key)
-- 如果库存为0，则返回-1，同时设置此商品秒杀结束
if not stock or tonumber(stock) < 0 then
    return -300
end

-- 如果库存为0，则设置此商品秒杀结束
if not stock or tonumber(stock) == 0 then
    redis.call("set", good_end_key, "true")
end
-- 将当前会员添加到已购买列表
redis.call("sadd", bought_users_key, member_account)

return 1
